Multi-tenancy is an architecture in which a single instance or a load-balanced farm of identical instances of a software application serves multiple customers. Each customer is referred to as a tenant. Each tenant's data is isolated and invisible to other tenants. Multi-tenancy can be economical because software development and maintenance costs are shared.
Deploying a software application that supports multi-tenancy comes with its own challenges. The application architecture needs to be adapted to cope with multi-tenancy requirements. Compared to traditional n-tier deployments where each customer installs its own services and storage, a cloud application that supports multi-tenancy leverages the benefits of shared resources to maximize the resources throughout all customers. Therefore, application components and databases need to be changed in order to support multi-tenancy.
In many scenarios, due to customer limitations relating to the “cloud offering,” two versions of a same software application need to be developed and maintained, one designed for the on-premises architecture without multi-tenancy features, and the other with multi-tenancy features. This leads to increased development and maintenance costs for service providers.
Moreover, while some components like databases and messaging systems have introduced support for multi-tenancy abstractions, manual set-up and coordination is still required to enable a software application to support multi-tenancy.